home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 95 / Amiga News 95.iso / dpat / dpat08 / lfmerge / lfmerge.c next >
C/C++ Source or Header  |  1993-02-08  |  2KB  |  107 lines

  1. #include <Stdio.h>
  2. #include <string.h>
  3. #include <exec/types.h>
  4.  
  5. #define MAXXRES 2048
  6.  
  7. FILE *e1=NULL,*e2=NULL,*s=NULL;
  8. UBYTE lb[MAXXRES * 3];
  9.  
  10. void cleanup()
  11. {
  12.     if(e1) fclose(e1);
  13.     if(e2) fclose(e2);
  14.     if(s)  fclose(s);
  15. }
  16.  
  17. void Erreur(char *msg)
  18. {
  19.     printf("%s\n",msg);
  20.     exit(15);
  21. }
  22.  
  23. unsigned int fgetnum(FILE *f)
  24. {
  25.     unsigned int a;
  26.     a=fgetc(f)+(fgetc(f) << 8);
  27.     if (feof(f))
  28.         return (0xffff);
  29.     else
  30.         return (a);
  31. }
  32.  
  33. void fputnum(unsigned int i)
  34. {
  35.     fputc(i & 0xff,s);
  36.     fputc((i >> 8) & 0xff,s);
  37. }
  38.  
  39. main(c,v)
  40. int c;
  41. char *v[];
  42. {
  43.     unsigned int xr,yr,h,l1,l2;
  44.  
  45.     puts("\n\t\t\t\t  Merge V1.1 ");
  46.     puts("\t\t\t\t© LF soft 1991");
  47.     puts("\n\tMerge 2 fichier images au format QRT (DKBtrace,QRTtrace,...)\n");
  48.  
  49.     if(c!=4) Erreur ("Usage :Merge src1 src2 dst");
  50.     atexit(cleanup);
  51.  
  52.     if(!(e1=fopen(v[1],"rb"))) Erreur ("Impossible d'ouvrir le 1er fichier");
  53.     if(!(e2=fopen(v[2],"rb"))) Erreur ("Impossible d'ouvrir le 2nd fichier");
  54.     if(!(s=fopen(v[3],"wb"))) Erreur ("Impossible d'ouvrir le 3em fichier");
  55.  
  56.     if(((xr=fgetc(e1))!=fgetc(e2)) || ((h=fgetc(e1))!=fgetc(e2)))
  57.         Erreur ("Les 2 images sources n'ont pas la même largeur !");
  58.     if((xr +=((unsigned int)h) << 8)>MAXXRES)
  59.         Erreur ("Images trops larges !!");
  60.     printf("Largeur = %d ,",xr);
  61.     yr = fgetc(e1); l1 = fgetc(e2);
  62.     h = fgetc(e1); l2 = fgetc(e2);
  63.     if((yr +=((unsigned int)h) << 8)<(l1 +=((unsigned int)l2) << 8))
  64.         yr = l1;
  65.     printf(" Hauteur = %d\n",yr);
  66.  
  67.     /* On ecrit la taille */
  68.     fputnum(xr);
  69.     fputnum(yr);
  70.  
  71.     l1=fgetnum(e1);
  72.     l2=fgetnum(e2);
  73.  
  74.     while (!(feof(e1) &&feof(e2))){
  75. #ifdef DEBUG
  76.     printf("l1 =%d , l2=%d",l1,l2);
  77. #endif
  78.         if (l1<l2){
  79. #ifdef DEBUG
  80.     puts(" => l1");
  81. #endif
  82.             fputnum(l1);
  83.             fread(lb,1,xr*3,e1);
  84.             l1=fgetnum(e1);
  85.         } else if (l1==l2) {
  86. #ifdef DEBUG
  87.     puts(" => l2");
  88. #endif
  89.             fputnum(l1);
  90.             fread(lb,1,xr*3,e1);
  91.             fread(lb,1,xr*3,e2);
  92.             l1=fgetnum(e1);
  93.             l2=fgetnum(e2);
  94.         } else {
  95. #ifdef DEBUG
  96.     puts(" => l2");
  97. #endif
  98.             fputnum(l2);
  99.             fread(lb,1,xr*3,e2);
  100.             l2=fgetnum(e2);
  101.         }
  102.         fwrite(lb,1,xr*3,s);
  103.     }
  104.  
  105.     exit(0);
  106. }
  107.